#include "bsp_gpio.h"

/* 用户led GPIO初始化 */
void UserLed_GPIO_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    /* GPIO Ports Clock Enable */
    USER_LED_GPIO_CLK_ENABLE();
    GPIO_InitStruct.Pin = USER_LED_GPIO_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(USER_LED_GPIO_PORT, &GPIO_InitStruct);
}
/* DEBUG 串口 GPIO 初始化 */
void DebugUart_GPIO_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    /* GPIO Ports Clock Enable */
    DEBUG_UART_GPIO_CLK_ENABLE();
    GPIO_InitStruct.Pin = DEBUG_UART_TX_GPIO_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(DEBUG_UART_TX_GPIO_PORT, &GPIO_InitStruct);
    GPIO_InitStruct.Pin = DEBUG_UART_RX_GPIO_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_INPUT;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(DEBUG_UART_RX_GPIO_PORT, &GPIO_InitStruct);
}
/* 串口屏 UART GPIO 初始化 */
void ScreenUart_GPIO_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    /* GPIO Ports Clock Enable */
    SCREEN_UART_GPIO_CLK_ENABLE();
    GPIO_InitStruct.Pin = SCREEN_UART_TX_GPIO_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(SCREEN_UART_TX_GPIO_PORT, &GPIO_InitStruct);
    GPIO_InitStruct.Pin = SCREEN_UART_RX_GPIO_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_INPUT;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(SCREEN_UART_RX_GPIO_PORT, &GPIO_InitStruct);
}

/* DHT11 GPIO 初始化 */
void DHT11_GPIO_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    /* GPIO Ports Clock Enable */
    DHT11_GPIO_CLK_ENABLE();
    GPIO_InitStruct.Pin = DHT11_GPIO_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(DHT11_GPIO_PORT, &GPIO_InitStruct);
}
/* DS18B20 GPIO 初始化 */ 
void DS18B20_GPIO_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    /* GPIO Ports Clock Enable */
    DS18B20_GPIO_CLK_ENABLE();
    GPIO_InitStruct.Pin = OW_GPIO_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(OW_GPIO_PORT, &GPIO_InitStruct);
}
/* 霍尔传感器 初始化 */
void Hall_GPIO_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    /* GPIO Ports Clock Enable */
    HALL_GPIO_CLK_ENABLE();
    GPIO_InitStruct.Pin = HALL_GPIO_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(HALL_GPIO_PORT, &GPIO_InitStruct);
    // 外部中断配置
    HAL_NVIC_SetPriority(HALL_EXTI_IRQn, 0, 0); // 设置中断优先级，抢占优先级为5，子优先级为0
    HAL_NVIC_EnableIRQ(HALL_EXTI_IRQn); // 使能外部中断
}
/* 风扇PWM Channel GPIO 初始化 */
void Fan_PWM_GPIO_Init(void)
{
    FAN_PWM_GPIO_CLK_ENABLE();
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    GPIO_InitStruct.Pin = FAN_PWM_GPIO_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(FAN_PWM_GPIO_PORT, &GPIO_InitStruct);
}
//TB6612 AIN GPIO 初始化
void TB6612_AIN_GPIO_Init(void)
{
    TB6612_AIN_GPIO_CLK_ENABLE();
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    GPIO_InitStruct.Pin = TB6612_AIN1_GPIO_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(TB6612_AIN1_GPIO_PORT, &GPIO_InitStruct);
    GPIO_InitStruct.Pin = TB6612_AIN2_GPIO_PIN;
    HAL_GPIO_Init(TB6612_AIN2_GPIO_PORT, &GPIO_InitStruct);
}
//加热灯初始化
void HOTLED_GPIO_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    /* GPIO Ports Clock Enable */
    HOTLED_GPIO_CLK_ENABLE();
    GPIO_InitStruct.Pin = HOTLED_GPIO_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(HOTLED_GPIO_PORT, &GPIO_InitStruct);
}
//水泵指示灯初始化
void WATLED_GPIO_Init(void)
{
		GPIO_InitTypeDef GPIO_InitStruct = {0};
    /* GPIO Ports Clock Enable */
    WATLED_GPIO_CLK_ENABLE();
    GPIO_InitStruct.Pin = WATLED_GPIO_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(WATLED_GPIO_PORT, &GPIO_InitStruct);
}
//水加热指示灯初始化
void WATHOT_GPIO_Init(void)
{
		GPIO_InitTypeDef GPIO_InitStruct = {0};
    /* GPIO Ports Clock Enable */
    WATHOT_GPIO_CLK_ENABLE();
    GPIO_InitStruct.Pin = WATHOT_GPIO_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(WATHOT_GPIO_PORT, &GPIO_InitStruct);
}
//蜂鸣器初始化
void BUZZER_GPIO_Init(void)
{
		GPIO_InitTypeDef GPIO_InitStruct = {0};
    /* GPIO Ports Clock Enable */
    BUZZER_GPIO_CLK_ENABLE();
    GPIO_InitStruct.Pin = BUZZER_GPIO_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(BUZZER_GPIO_PORT, &GPIO_InitStruct);
}
